home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 2: CDPD 1
/
Almathera Ten on Ten - Disc 2: CDPD 1.iso
/
pd
/
076-100
/
087
/
autoiconopen
/
autoiconopen.asm
< prev
next >
Wrap
Assembly Source File
|
1995-03-13
|
6KB
|
185 lines
* Assembly language version of AutoIconOpen.c
* Translated by John Veldthuis (Taranaki)
* Only works under AmigaDOS 1.1, need to create port to receive reply msgs
* See AutoIconOpen.c for documentation
*
section "AutoOpenIcon",code
NOLIST
NOPAGE
include "exec/types.i"
include "exec/io.i"
include "exec/devices.i"
include "devices/input.i"
include "devices/inputevent.i"
LIST
xref _AbsExecBase
xref _LVOOpenDevice
xref _LVOCloseDevice
xref _LVODoIO
Start lea DevName,a0 ;"Input.Device",0
clr.l d0
lea IORequest,a1 ;IORequest Structure
clr.l d1
move.l _AbsExecBase,a6
jsr _LVOOpenDevice(a6) ;open input.device
tst.l d0
beq.s Okay ;zero return if device open
move.l #10,d0 ;If device not open signal errorto CLI
rts
Okay lea IORequest,a0 ;Pointer for setup
move.w #IND_WRITEEVENT,IO_COMMAND(a0) ;Signal event for Intuition
move.b #0,IO_FLAGS(a0)
move.l #ie_SIZEOF,IO_LENGTH(a0) ;Length of Event structure
lea Event,a2
move.l a2,IO_DATA(a0) ;Address of event structure
** Move pointer to top lefthand corner **
lea Event,a0
move.l #0,ie_NextEvent(a0) ;no next event
move.b #IECLASS_RAWMOUSE,ie_Class(a0)
move.l #0,ie_TimeStamp+TV_SECS(a0)
move.l #0,ie_TimeStamp+TV_MICRO(a0)
move.w #IECODE_NOBUTTON,ie_Code(a0) ;no button down
move.w #IEQUALIFIER_RELATIVEMOUSE,ie_Qualifier(a0)
move.w #-640,ie_X(a0) ;move mouse to upper left
move.w #-512,ie_Y(a0)
lea IORequest,a1
jsr _LVODoIO(a6)
tst.l d0
bne Error ;Error from IO if not Null returned
*** Move pointer to bottom righthand corner **
lea Event,a0
move.l #0,ie_NextEvent(a0) ;no next event
move.b #IECLASS_RAWMOUSE,ie_Class(a0)
move.l #0,ie_TimeStamp+TV_SECS(a0)
move.l #0,ie_TimeStamp+TV_MICRO(a0)
move.w #IECODE_LBUTTON,ie_Code(a0) ;left button down
move.w #IEQUALIFIER_RELATIVEMOUSE,ie_Qualifier(a0)
move.w #638,ie_X(a0) ;move mouse to lower right
move.w #398,ie_Y(a0)
lea IORequest,a1
jsr _LVODoIO(a6)
tst.l d0
bne Error ;Error from IO if not Null returned
** resize window **
lea Event,a0
move.l #0,ie_NextEvent(a0)
move.b #IECLASS_RAWMOUSE,ie_Class(a0)
move.l #0,ie_TimeStamp+TV_SECS(a0)
move.l #0,ie_TimeStamp+TV_MICRO(a0)
move.w #IECODE_LBUTTON!IECODE_UP_PREFIX,ie_Code(a0) ;left button up
move.w #IEQUALIFIER_RELATIVEMOUSE,ie_Qualifier(a0)
move.w #-100,ie_X(a0) ;move mouse left 100
move.w #0,ie_Y(a0)
lea IORequest,a1
jsr _LVODoIO(a6)
tst.l d0
bne Error ;Error from IO if not Null returned
** Move to Disk Icon (595,45)? **
lea Event,a0
move.l #0,ie_NextEvent(a0)
move.b #IECLASS_RAWMOUSE,ie_Class(a0)
move.l #0,ie_TimeStamp+TV_SECS(a0)
move.l #0,ie_TimeStamp+TV_MICRO(a0)
move.w #IECODE_NOBUTTON,ie_Code(a0) ;no button
move.w #IEQUALIFIER_RELATIVEMOUSE,ie_Qualifier(a0)
move.w #55,ie_X(a0) ;move mouse to icon
move.w #-355,ie_Y(a0)
lea IORequest,a1
jsr _LVODoIO(a6)
tst.l d0
bne Error ;Error from IO if not Null returned
** Press left button **
lea Event,a0
move.l #0,ie_NextEvent(a0)
move.b #IECLASS_RAWMOUSE,ie_Class(a0)
move.l #0,ie_TimeStamp+TV_SECS(a0)
move.l #0,ie_TimeStamp+TV_MICRO(a0)
move.w #IECODE_LBUTTON,ie_Code(a0) ;left button down
move.w #IEQUALIFIER_RELATIVEMOUSE,ie_Qualifier(a0)
move.w #0,ie_X(a0)
move.w #0,ie_Y(a0)
lea IORequest,a1
jsr _LVODoIO(a6)
tst.l d0
bne Error ;Error from IO if not Null returned
** Press left button again **
lea Event,a0
move.l #0,ie_NextEvent(a0)
move.b #IECLASS_RAWMOUSE,ie_Class(a0)
move.l #0,ie_TimeStamp+TV_SECS(a0)
move.l #0,ie_TimeStamp+TV_MICRO(a0)
move.w #IECODE_LBUTTON,ie_Code(a0) ;left button down again
move.w #IEQUALIFIER_RELATIVEMOUSE,ie_Qualifier(a0)
move.w #0,ie_X(a0)
move.w #0,ie_Y(a0)
lea IORequest,a1
jsr _LVODoIO(a6)
tst.l d0
bne Error ;Error from IO if not Null returned
** All finished so close device and return to CLI **
lea IORequest,a1
jsr _LVOCloseDevice(a6)
moveq.l #0,d0 ;inform CLI of success
rts
Error lea IORequest,a1
jsr _LVOCloseDevice(a6)
move.l #20,d0
rts
SECTION "Data",DATA
DevName dc.b 'input.device',0
CNOP 0,2
IORequest
dc.l 0
dc.b 0
dc.b 0
dc.l 0
dc.l 0
dc.l 0
dc.w 0
dc.l 0
dc.l 0
dc.w 0
dc.b 0
dc.b 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
Event dc.l 0
dc.b 0
dc.b 0
dc.w 0
dc.w 0
dc.l 0
dc.w 0
dc.w 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
end